package org.lora.webframework.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.lora.log4j.Log4jUtil;
import org.lora.util.StringUtil;

/**
 * <p>
 * 类名:PropertiesUtil
 * </p>
 * 描述:<br>
 * 创建时间:2016年9月21日 上午10:14:52<br>
 * 
 * @author Bladnir@outlook.com<br>
 *         修改历史:<br>
 *         2016年9月21日 Bladnir 创建<br>
 */
public class PropertiesUtil {

	public static final String DEFAULT_PROPERTIE_FILE_NAME = "bussiness.properties";

	private static Logger logger = Log4jUtil.getBusinessLogger();

	/**
	 * 构造方法
	 */
	private PropertiesUtil() {
		// just do nothing
	}

	/**
	 * 获取配置文件中的所有键值组成Map
	 * 
	 * @param fileName
	 * @return
	 */
	public static Map<String, String> getAllValueMap(String fileName) {
		if (StringUtil.isNull(fileName)) {
			return null;
		}

		Map<String, String> resultMap = new HashMap<>();

		try {

			Properties prop = new Properties();

			String path = PropertiesUtil.class.getClassLoader().getResource(StringUtil.BLANK).toURI().getPath();

			// 把文件读入文件输入流，存入内存中
			FileInputStream fis = new FileInputStream(new File(path + fileName));
			// 加载文件流的属性
			prop.load(fis);

			for (Entry<Object, Object> entry : prop.entrySet()) {
				resultMap.put(entry.getKey().toString(), entry.getValue().toString());
			}
		} catch (IOException | URISyntaxException e) {
			logger.error(e);
		}

		return resultMap;

	}

	/**
	 * 获取配置文件中的值
	 * 
	 * @param key
	 * @param fileName
	 * @return
	 */
	public static String getValue(String key, String fileName) {

		if (StringUtil.isNull(key) || StringUtil.isNull(fileName)) {
			return null;
		}

		String result = StringUtil.BLANK;

		try {

			Properties prop = new Properties();

			String path = PropertiesUtil.class.getClassLoader().getResource(StringUtil.BLANK).toURI().getPath();

			// 把文件读入文件输入流，存入内存中
			FileInputStream fis = new FileInputStream(new File(path + fileName));
			// 加载文件流的属性
			prop.load(fis);

			result = prop.getProperty(key);

		} catch (IOException | URISyntaxException e) {
			logger.error(e);
		}

		return result;

	}

	/**
	 * 获取配置文件中的值
	 * 
	 * @param key
	 * @return
	 */
	public static String getValue(String key) {
		return getValue(key, DEFAULT_PROPERTIE_FILE_NAME);
	}

}
